﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DigitalSolutionControls;
using System.Threading;
using DigitalSolutionLibrary.SqlDatabase;
using System.IO;
using DigitalSolutionLibrary.Utilities;

namespace DigitalSolutionManagement
{
    public partial class frmEditProduct : BaseFormEdit
    {
        //private int proId;
        private OpenMode openMode;
        private Thread th;

        public override BaseFormEdit GetNewInstance(BaseFormEdit.OpenMode mode)
        {
            return new frmEditProduct(mode);
        }

        #region prepare form
        private void PrepareForm()
        {
            //Load unit
            object obj = Program.dbWrapper.ExecuteStore("LoadUnit", null, DatabaseWrapper.ReturnType.DATASET);
            if (obj != null)
            {
                DataSet ds = (DataSet)obj;
                cmbUnit.DataSource = ds.Tables[0];
                cmbUnit.DisplayMember = "UnitName";
                cmbUnit.ValueMember = "UnitId";
            }
            else
            {
                processing1.HideProcessing();
                btnOk.Enabled = false;
                MessageBox.Show("Không thể kết nối đến server, vui lòng thử lại sau", "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            ParameterStock stock;
            Parameter par;
            //if open mode = add, Load product code
            if (openMode == OpenMode.NEW)
            {
                stock = new ParameterStock();
                par = new Parameter("type", 2, SqlDbType.Int);
                stock.AddParamter(par);
                obj = Program.dbWrapper.ExecuteStore("GenerateCode", stock, DatabaseWrapper.ReturnType.FIRST_CELL);
                if (obj != null)
                {
                    txtCode.Text = obj.ToString();
                    processing1.HideProcessing();
                }
                else
                {
                    processing1.HideProcessing();
                    btnOk.Enabled = false;
                    MessageBox.Show("Không thể kết nối đến server, vui lòng thử lại sau", "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
            else
            {
                stock = new ParameterStock();
                par = new Parameter("ProId", ItemId, SqlDbType.Int);
                stock.AddParamter(par);
                obj = Program.dbWrapper.ExecuteStore("GetProduct", stock, DatabaseWrapper.ReturnType.DATASET);
                if (obj != null)
                {
                    DataSet ds = (DataSet)obj;
                    txtCode.Text = ds.Tables[0].Rows[0]["ProCode"].ToString();
                    txtDesc.Text = ds.Tables[0].Rows[0]["ProDescription"].ToString();
                    txtName.Text = ds.Tables[0].Rows[0]["ProName"].ToString();
                    txtPriceIn.Text = ds.Tables[0].Rows[0]["ProPriceIn"].ToString();
                    txtPriceOut.Text = ds.Tables[0].Rows[0]["ProPriceOut"].ToString();
                    cmbUnit.SelectedValue = (int)ds.Tables[0].Rows[0]["ProUnit"];
                    if (ds.Tables[0].Rows[0]["ProImage"] != DBNull.Value)
                    {
                        picImage.Image = Utility.ByteToImage((byte[])ds.Tables[0].Rows[0]["ProImage"]);
                    }
                    processing1.HideProcessing();
                }
                else
                {
                    processing1.HideProcessing();
                    btnOk.Enabled = false;
                    MessageBox.Show("Không thể kết nối đến server, vui lòng thử lại sau", "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
        #endregion

        #region button ok click
        private void OkClick()
        {
            ParameterStock stock = new ParameterStock();
            Parameter par = new Parameter("Id", ItemId, SqlDbType.Int);
            stock.AddParamter(par);

            par = new Parameter("Code", txtCode.Text, SqlDbType.NVarChar, 50);
            stock.AddParamter(par);

            par = new Parameter("Name", txtName.Text, SqlDbType.NVarChar, 100);
            stock.AddParamter(par);

            par = new Parameter("PriceIn", txtPriceIn.Text, SqlDbType.Decimal);
            stock.AddParamter(par);

            par = new Parameter("PriceOut", txtPriceOut.Text, SqlDbType.Decimal);
            stock.AddParamter(par);

            par = new Parameter("Description", txtDesc.Text, SqlDbType.NVarChar, 200);
            stock.AddParamter(par);

            if (picImage.Image != null)
            {
                par = new Parameter("Image", Utility.ImageToByte(picImage.Image), SqlDbType.Image);
                stock.AddParamter(par);
            }

            par = new Parameter("Unit", cmbUnit.SelectedValue, SqlDbType.Int);
            stock.AddParamter(par);

            par = new Parameter("Message", null, SqlDbType.NVarChar, ParameterDirection.Output, 200);
            stock.AddParamter(par);

            object obj = Program.dbWrapper.ExecuteStore(openMode == OpenMode.NEW ? "AddProduct" : "EditProduct", stock, DatabaseWrapper.ReturnType.FIRST_CELL);
            if (obj != null)
            {
                int code = (int)obj;
                if (code == -1)
                {
                    processing1.HideProcessing();
                    MessageBox.Show(stock.GetByName("Message").ValueOut.ToString(), "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                    DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
            {
                processing1.HideProcessing();
                MessageBox.Show("Không thể kết nối đến server, vui lòng thử lại sau", "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        #endregion

        public frmEditProduct()
        {
        }

        public frmEditProduct(OpenMode mode)
        {
            CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
            //proId = id;
            openMode = mode;

            if (mode == OpenMode.EDIT)
            {
                this.Text = formHeader1.Title = "Chỉnh sửa sản phẩm";
                btnOk.Text = "Lưu";
                btnOk.Type = IconButton.ButtonType.SAVE;
            }
        }

        private void frmEditProduct_Load(object sender, EventArgs e)
        {
            processing1.ShowProcessing();
            th = new Thread(() => PrepareForm());
            th.Start();
        }

        private void picImage_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                FileInfo finfo = new FileInfo(openFileDialog1.FileName);
                if (finfo.Length > 1024 * 100)
                {
                    MessageBox.Show("Dung lượng ảnh quá lớn, vui lòng chọn ảnh nhỏ hơn 100KB", "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    picImage.BackgroundImage = null;
                    picImage.ImageLocation = openFileDialog1.FileName;
                }
            }
        }

        private void lblClrear_Click(object sender, EventArgs e)
        {
            if (picImage.Image != null)
            {
                picImage.Image = null;
                picImage.BackgroundImage = Properties.Resources.no_image;
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            DialogResult = System.Windows.Forms.DialogResult.Cancel;
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            if (txtName.Text == String.Empty)
            {
                MessageBox.Show("Vui lòng nhập tên sản phẩm", "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtName.Focus();
                return;
            }
            if(txtPriceIn.Text==String.Empty)
            {
                MessageBox.Show("Vui lòng nhập giá nhập sản phẩm", "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtPriceIn.Focus();
                return;
            }
            if (txtPriceOut.Text == String.Empty)
            {
                MessageBox.Show("Vui lòng nhập giá xuất sản phẩm", "DSCo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtPriceOut.Focus();
                return;
            }

            processing1.ShowProcessing();
            th = new Thread(() => OkClick());
            th.Start();
        }

        private void frmEditProduct_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (th != null && th.IsAlive)
                th.Abort();
        }
    }
}
